package com.xtm.exercise.base.circularDependency;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

/***
 *@Author: 王磊
 *@CreateTime: 2024-04-22  20:32
 *@Description:  spring循环依赖  Spring循环依赖的产生原因、解决方法以及相关示例。
 *  https://blog.csdn.net/GoodburghCottage/article/details/126933724
 *
 *  https://blog.csdn.net/weixin_62988359/article/details/136455865
 *
 *  Spring循环依赖的解决方法
 * 为了解决Spring循环依赖问题，我们可以采取以下几种方法：
 *
 * 构造函数注入： 在构造函数注入中，Spring会检查循环依赖，并在发现循环依赖时抛出异常，避免死循环。
 * 使用@Lazy注解： @Lazy注解可以延迟Bean的实例化，从而避免循环依赖的问题。
 * 使用setter方法
 * Spring框架为开发者提供了强大的依赖注入功能，然而，当不当使用时，就会出现循环依赖的问题。本文将介绍Spring循环依赖的形成原因以及解决方法。
 *
 * 循环依赖的形成
 * Spring循环依赖通常出现在两种情况下：
 * 1. 构造函数循环依赖
 * 构造函数循环依赖发生在Bean的构造函数中相互依赖的情况下。例如：
 * 2. 属性循环依赖
 * 属性循环依赖发生在Bean的属性中相互依赖的情况下。例如：
 */

// 构造函数循环依赖
@Component
public class TestService1 {

    private TestService2 testService2;

    @Lazy // 延时加载
    public TestService1(TestService2 testService2){
        this.testService2 = testService2;
    }
}
